home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Source Code
/
Pascal
/
Snippets
/
PNL Libraries
/
MyResources.p
< prev
next >
Wrap
Text File
|
1997-06-06
|
3KB
|
120 lines
unit MyResources;
interface
uses
Types, Quickdraw;
const
kResChain = -13001;
kCurrentResFile = -13002;
function MGetResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
function MGetDetachedResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
function MGetPicture( id: integer; var ph: PicHandle ): OSErr;
function MReplaceResource( resfile: integer; typ: OSType; id: integer; const name: Str255; data: univ Handle ): OSErr;
implementation
uses
Errors, Memory, Resources,
MyAssertions, MyUtils;
{ Damn Resource Manager is so broken! }
function MGetResError( data: Handle ): OSErr;
var
err: OSErr;
begin
if data <> nil then begin
err := noErr;
end else begin
err := ResError;
if err = noErr then begin
err := -1;
end;
end;
MGetResError := err;
end;
function MGetPicture( id: integer; var ph: PicHandle ): OSErr;
var
err: OSErr;
begin
err := noErr;
ph := GetPicture( id );
if (ph = nil) | (ph^ = nil) then begin
err := MemError;
if err = noErr then begin
err := resNotFound;
end;
ph := nil;
end;
MGetPicture := err;
end;
function MGetResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
var
err: OSErr;
saved: integer;
begin
case resfile of
kResChain: begin
data := GetResource( typ, id );
err := MGetResError( data );
end;
kCurrentResFile: begin
data := Get1Resource( typ, id );
err := MGetResError( data );
end;
otherwise begin
saved := CurResFile;
UseResFile( resfile );
data := Get1Resource( typ, id );
err := MGetResError( data );
UseResFile( saved );
end;
end;
MGetResource := err;
end;
function MGetDetachedResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
var
err: OSErr;
begin
err := MGetResource( resfile, typ, id, data );
if err = noErr then begin
HNoPurge( data );
DetachResource( data );
end;
MGetDetachedResource := err;
end;
function MReplaceResource( resfile: integer; typ: OSType; id: integer; const name: Str255; data: univ Handle ): OSErr;
var
err: OSErr;
saved: integer;
old: Handle;
begin
Assert( resfile <> kResChain );
saved := CurResFile;
if resfile <> kCurrentResFile then begin
UseResFile( resfile );
end;
old := Get1Resource( typ, id );
if old <> nil then begin
RemoveResource( old );
DisposeHandle( old );
end;
AddResource( data, typ, id, name );
err := ResError;
ChangedResource( data );
AddOSErr( err, ResError );
WriteResource( data );
AddOSErr( err, ResError );
DetachResource( data );
UseResFile( saved );
MReplaceResource := err;
end;
end.